Fluent中floating point exception的问题原因及处理方法 您所在的位置:网站首页 fluent出现stabilizing pressure Fluent中floating point exception的问题原因及处理方法

Fluent中floating point exception的问题原因及处理方法

2024-07-14 15:18| 来源: 网络整理| 查看: 265

在fluent计算中,经常会遇到 floating point exception的报错,让人很头疼。查找了一下,相关网上的原因,总结了这篇文章。内容不全部为原创。

1.1浮点数floating point

既然说了是浮点数溢出,那么先来看下什么是浮点数。我们都知道,fluent用的C语言写的。好的,我们来回顾下在C语言里,数据类型有哪些。

表1 C语言中的数据类型

类型

操作数类型

存储长度

char

整数/字节

8

short

整数/字

16

int

整数/双字

32

long int

整数/双字

32

Long long int

-

2x32

Char*

整数/双字

32

Float

单精度浮点数

32

Double

双精度浮点数

32

Long double

扩展精度浮点数

80/96

1.2浮点数的表示方式

在计算机中,采用科学计数法来存储浮点数,不同于平时见到以10为基数,计算机中以2为基数,表示浮点数。例如,要表示123456789,科学计数法表示为1.23456789*10^8或者,12.3456789*10^7。

在计算机中,用科学计数法,并且要用规格化的形式,即小数点前只有一位非0数。这个是为了方便运算,统一的格式适合重复运算。

1.3浮点数的表示范围

可以看到浮点数是有表示范围的,而且不仅有最大值,正数里有最小值,负数里有最小值,还有最大值。

32位浮点数的规格化数表示为:

第0位,表示正负

第1-8位,表示阶码E

第9-31位,表示尾数M

浮点数表示的范围,

负数-(1-2^-24)×2^127到-2^-129

正数2^-129到(1-2^-24)

1.4为什么会出现浮点数的溢出?

浮点数溢出的问题,最主要的问题就是除以0 ,有的人会说了,那我的这里面都有值,都给了速度,但是,如果给的值过小的话,就会导致浮点数溢出。另外,如果网格质量差,在一些质量差的地方,会出现极小值,导致出现溢出的情况。

1.5浮点数溢出的解决方法

常见的问题可能有边界条件设置有误,初始条件不合理,网格质量差,时间步长太大,松弛因子设置问题。

使用upwind convection schemes

引入了数值扩散,可以确保在特定的情况下收敛。避免使用高阶项,因为更容易引起不收敛的问题。

检查边界条件

湍流动能是否为零,温度边界是否有未定义,可压缩流体中的压力是否为零。

初始化

初始化出现问题,瞬态计算的初始值设定是否合理。如果不合理,或者报错,可以修改或者细化。

合适的步长

步长太大导致计算不收敛,在开始的时候如果步长过大,流体的流速较小,会出现报错。

使用亚松弛因子

默认的计算方式,使用新计算的值代替旧值,但是如果都用旧值,可能出现在局部收敛的情况。亚松弛因子的原理,在新值产生之后,不全用新值代替旧值,而是给新值和旧值个一直权重,组合来进行。

求解器

尽可能使用耦合式求解器

处理器

在串联或者并联计算的时候,使用单个求解器可能会出现浮点数溢出。

网格质量

检查所有网格的质量,确保歪斜度skewness在0.8以下。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有